css: Implement font-variant-alternatives
authorMatthias Clasen <mclasen@redhat.com>
Mon, 18 Sep 2017 14:01:05 +0000 (10:01 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 18 Sep 2017 18:26:57 +0000 (14:26 -0400)
This is only a partial implementation, since we don't support
@font-feature-values. The only supported value is historical-forms,
for now.

gtk/gtkcssstyle.c
gtk/gtkcssstylepropertyimpl.c
gtk/gtkcsstypesprivate.h

index 33960349d8cb042bacbfc19c661c2a7cc16979e9..1fbe5e6bbaf3d5d89161f23c6819000ee74162a8 100644 (file)
@@ -230,6 +230,7 @@ gtk_css_style_get_pango_attributes (GtkCssStyle *style)
   GtkCssValue *position;
   GtkCssValue *caps;
   GtkCssValue *numeric;
+  GtkCssValue *alternatives;
   GString *s;
   int i;
 
@@ -369,6 +370,15 @@ gtk_css_style_get_pango_attributes (GtkCssStyle *style)
         g_string_append (s, "zero 1");
     }
 
+  alternatives = gtk_css_style_get_value (style, GTK_CSS_PROPERTY_FONT_VARIANT_ALTERNATIVES);
+  for (i = 0; i < _gtk_css_array_value_get_n_values (alternatives); i++)
+    {
+      GtkCssValue *value = _gtk_css_array_value_get_nth (alternatives, i);
+      if (s->len > 0) g_string_append (s, ", ");
+      if (strcmp (_gtk_css_ident_value_get (value), "historical-forms") == 0)
+        g_string_append (s, "hist 1");
+    }
+
   attrs = add_pango_attr (attrs, pango_attr_font_features_new (s->str));
   g_string_free (s, TRUE);
 
index a0311b37b0b2bea4d2e22907bf798bac0a317525..25c66f9b771742721c9073afe07a88b4391195fd 100644 (file)
@@ -736,6 +736,19 @@ parse_font_variant_numeric (GtkCssStyleProperty *property,
   return value;
 }
 
+static GtkCssValue *
+parse_font_variant_alternatives (GtkCssStyleProperty *property,
+                                 GtkCssParser        *parser)
+{
+  GtkCssValue *value = NULL;
+
+  value = _gtk_css_ident_value_try (parser, "normal", "historical-forms", NULL);
+  if (value == NULL)
+    _gtk_css_parser_error (parser, "Not a valid value");
+
+  return value;
+}
+
 static GtkCssValue *
 box_shadow_value_parse (GtkCssStyleProperty *property,
                         GtkCssParser        *parser)
@@ -1261,6 +1274,14 @@ _gtk_css_style_property_init_properties (void)
                                           parse_font_variant_numeric,
                                           NULL,
                                           _gtk_css_array_value_new (_gtk_css_ident_value_new ("normal")));
+  gtk_css_style_property_register        ("font-variant-alternatives",
+                                          GTK_CSS_PROPERTY_FONT_VARIANT_ALTERNATIVES,
+                                          G_TYPE_NONE,
+                                          0,
+                                          GTK_CSS_AFFECTS_TEXT | GTK_CSS_AFFECTS_TEXT_ATTRS,
+                                          parse_font_variant_alternatives,
+                                          NULL,
+                                          _gtk_css_array_value_new (_gtk_css_ident_value_new ("normal")));
   gtk_css_style_property_register        ("text-shadow",
                                           GTK_CSS_PROPERTY_TEXT_SHADOW,
                                           G_TYPE_NONE,
index 5ca7b7aa3af68d11df19a24ec0b61565ddae3d30..6518a2429181f3b6272883a43fa309c4830d4da6 100644 (file)
@@ -168,6 +168,7 @@ enum { /*< skip >*/
   GTK_CSS_PROPERTY_FONT_VARIANT_POSITION,
   GTK_CSS_PROPERTY_FONT_VARIANT_CAPS,
   GTK_CSS_PROPERTY_FONT_VARIANT_NUMERIC,
+  GTK_CSS_PROPERTY_FONT_VARIANT_ALTERNATIVES,
   GTK_CSS_PROPERTY_TEXT_SHADOW,
   GTK_CSS_PROPERTY_BOX_SHADOW,
   GTK_CSS_PROPERTY_MARGIN_TOP,